1 from tkinter import *
2 import random
3
4 class Bill_App:
5 def __init__(self,root):
6 self.root = root
7 self.root.geometry("1300x700+0+0")
8 self.root.maxsize(width = 1280,height = 700)
9 self.root.minsize(width = 1280,height = 700)
10 self.root.title("Grocery Billing System")
11
12 #====================Variables========================#
13 self.cus_name = StringVar()
14 self.c_phone = StringVar()
15 #For Generating Random Bill Numbers
16 x = random.randint(1000,9999)
17 self.c_bill_no = StringVar()
18 #Seting Value to variable
19 self.c_bill_no.set(str(x))
20
21 self.bread = IntVar()
22 self.candy = IntVar()
23 self.hamburger = IntVar()
24 self.hotdog = IntVar()
25 self.sandwich = IntVar()
26 self.rice = IntVar()
27 self.salt = IntVar()
28 self.food_oil = IntVar()
29 self.wheat = IntVar()
30 self.sugar = IntVar()
31 self.gatorade = IntVar()
32 self.coke = IntVar()
33 self.juice = IntVar()
34 self.waffer = IntVar()
35 self.biscuits = IntVar()
36 self.total_food = StringVar()
37 self.total_grocery = StringVar()
38 self.total_other = StringVar()
39 self.tax_cos = StringVar()
40 self.tax_groc = StringVar()
41 self.tax_other = StringVar()
42
43
44 #===================================
45 bg_color = "green"
46 fg_color = "white"
47 lbl_color = 'white'
48 #Title of App
49 title = Label(self.root,text = "Grocery Billing System",bd = 12,relief = GROOVE,fg = fg_color,bg = bg_color,font=("times new roman",30,"bold"),pady = 3).pack(fill = X)
50
51 #==========Customers Frame==========#
52 F1 = LabelFrame(text = "Customer Details",font = ("time new roman",12,"bold"),fg = "gold",bg = bg_color,relief = GROOVE,bd = 10)
53 F1.place(x = 0,y = 80,relwidth = 1)
54
55 #===============Customer Name===========#
56 cname_lbl = Label(F1,text="Customer Name",bg = bg_color,fg = fg_color,font=("times new roman",15,"bold")).grid(row = 0,column = 0,padx = 10,pady = 5)
57 cname_en = Entry(F1,bd = 8,relief = GROOVE,textvariable = self.cus_name)
58 cname_en.grid(row = 0,column = 1,ipady = 4,ipadx = 30,pady = 5)
59
60 #=================Customer Phone==============#
61 cphon_lbl = Label(F1,text = "Phone No",bg = bg_color,fg = fg_color,font = ("times new roman",15,"bold")).grid(row = 0,column = 2,padx = 20)
62 cphon_en = Entry(F1,bd = 8,relief = GROOVE,textvariable = self.c_phone)
63 cphon_en.grid(row = 0,column = 3,ipady = 4,ipadx = 30,pady = 5)
64
65 #====================Customer Bill No==================#
66 cbill_lbl = Label(F1,text = "Bill No.",bg = bg_color,fg = fg_color,font = ("times new roman",15,"bold"))
67 cbill_lbl.grid(row = 0,column = 4,padx = 20)
68 cbill_en = Entry(F1,bd = 8,relief = GROOVE,textvariable = self.c_bill_no)
69 cbill_en.grid(row = 0,column = 5,ipadx = 30,ipady = 4,pady = 5)
70
71 #==================Food Frame=====================#
72 F2 = LabelFrame(self.root,text = 'Food',bd = 10,relief = GROOVE,bg = bg_color,fg = "gold",font = ("times new roman",13,"bold"))
73 F2.place(x = 5,y = 180,width = 325,height = 380)
74
75 #===========Frame Content
76 bath_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Bread")
77 bath_lbl.grid(row = 0,column = 0,padx = 10,pady = 20)
78 bath_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.bread)
79 bath_en.grid(row = 0,column = 1,ipady = 5,ipadx = 5)
80
81 #=======Candy
82 face_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Candy")
83 face_lbl.grid(row = 1,column = 0,padx = 10,pady = 20)
84 face_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.candy)
85 face_en.grid(row = 1,column = 1,ipady = 5,ipadx = 5)
86
87 #========Hamburger
88 wash_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Hamburger")
89 wash_lbl.grid(row = 2,column = 0,padx = 10,pady = 20)
90 wash_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.hamburger)
91 wash_en.grid(row = 2,column = 1,ipady = 5,ipadx = 5)
92
93 #========Hotdog
94 hair_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Hotdog")
95 hair_lbl.grid(row = 3,column = 0,padx = 10,pady = 20)
96 hair_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.hotdog)
97 hair_en.grid(row = 3,column = 1,ipady = 5,ipadx = 5)
98
99 #============Sandwich
100 lot_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Sandwich")
101 lot_lbl.grid(row = 4,column = 0,padx = 10,pady = 20)
102 lot_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.sandwich)
103 lot_en.grid(row = 4,column = 1,ipady = 5,ipadx = 5)
104
105 #==================Grocery Frame=====================#
106 F2 = LabelFrame(self.root,text = 'Grocery',bd = 10,relief = GROOVE,bg = bg_color,fg = "gold",font = ("times new roman",13,"bold"))
107 F2.place(x = 330,y = 180,width = 325,height = 380)
108
109 #===========Frame Content
110 rice_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Rice")
111 rice_lbl.grid(row = 0,column = 0,padx = 10,pady = 20)
112 rice_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.rice)
113 rice_en.grid(row = 0,column = 1,ipady = 5,ipadx = 5)
114
115 #=======
116 oil_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Food Oil")
117 oil_lbl.grid(row = 1,column = 0,padx = 10,pady = 20)
118 oil_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.food_oil)
119 oil_en.grid(row = 1,column = 1,ipady = 5,ipadx = 5)
120
121 #=======
122 daal_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Salt")
123 daal_lbl.grid(row = 2,column = 0,padx = 10,pady = 20)
124 daal_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.salt)
125 daal_en.grid(row = 2,column = 1,ipady = 5,ipadx = 5)
126
127 #========
128 wheat_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Wheat")
129 wheat_lbl.grid(row = 3,column = 0,padx = 10,pady = 20)
130 wheat_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.wheat)
131 wheat_en.grid(row = 3,column = 1,ipady = 5,ipadx = 5)
132
133 #============
134 sugar_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Sugar")
135 sugar_lbl.grid(row = 4,column = 0,padx = 10,pady = 20)
136 sugar_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.sugar)
137 sugar_en.grid(row = 4,column = 1,ipady = 5,ipadx = 5)
138
139 #==================Other Stuff=====================#
140
141 F2 = LabelFrame(self.root,text = 'Others',bd = 10,relief = GROOVE,bg = bg_color,fg = "gold",font = ("times new roman",13,"bold"))
142 F2.place(x = 655,y = 180,width = 325,height = 380)
143
144 #===========Frame Content
145 maza_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Gatorade")
146 maza_lbl.grid(row = 0,column = 0,padx = 10,pady = 20)
147 maza_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.gatorade)
148 maza_en.grid(row = 0,column = 1,ipady = 5,ipadx = 5)
149
150 #=======
151 cock_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Coke")
152 cock_lbl.grid(row = 1,column = 0,padx = 10,pady = 20)
153 cock_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.coke)
154 cock_en.grid(row = 1,column = 1,ipady = 5,ipadx = 5)
155
156 #=======
157 frooti_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Juice")
158 frooti_lbl.grid(row = 2,column = 0,padx = 10,pady = 20)
159 frooti_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.juice)
160 frooti_en.grid(row = 2,column = 1,ipady = 5,ipadx = 5)
161
162 #========
163 cold_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Waffer")
164 cold_lbl.grid(row = 3,column = 0,padx = 10,pady = 20)
165 cold_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.waffer)
166 cold_en.grid(row = 3,column = 1,ipady = 5,ipadx = 5)
167
168 #============
169 bis_lbl = Label(F2,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Biscuits")
170 bis_lbl.grid(row = 4,column = 0,padx = 10,pady = 20)
171 bis_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.biscuits)
172 bis_en.grid(row = 4,column = 1,ipady = 5,ipadx = 5)
173
174 #===================Bill Aera================#
175 F3 = Label(self.root,bd = 10,relief = GROOVE)
176 F3.place(x = 960,y = 180,width = 325,height = 380)
177 #===========
178 bill_title = Label(F3,text = "Bill List",font = ("Lucida",13,"bold"),bd= 7,relief = GROOVE)
179 bill_title.pack(fill = X)
180
181 #============
182 scroll_y = Scrollbar(F3,orient = VERTICAL)
183 self.txt = Text(F3,yscrollcommand = scroll_y.set)
184 scroll_y.pack(side = RIGHT,fill = Y)
185 scroll_y.config(command = self.txt.yview)
186 self.txt.pack(fill = BOTH,expand = 1)
187
188 #===========Buttons Frame=============#
189 F4 = LabelFrame(self.root,text = 'Bill Menu',bd = 10,relief = GROOVE,bg = bg_color,fg = "gold",font = ("times new roman",13,"bold"))
190 F4.place(x = 0,y = 560,relwidth = 1,height = 145)
191
192 #===================
193 cosm_lbl = Label(F4,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Total Food")
194 cosm_lbl.grid(row = 0,column = 0,padx = 10,pady = 0)
195 cosm_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.total_food)
196 cosm_en.grid(row = 0,column = 1,ipady = 2,ipadx = 5)
197
198 #===================
199 gro_lbl = Label(F4,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Total Grocery")
200 gro_lbl.grid(row = 1,column = 0,padx = 10,pady = 5)
201 gro_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.total_grocery)
202 gro_en.grid(row = 1,column = 1,ipady = 2,ipadx = 5)
203
204 #================
205 oth_lbl = Label(F4,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Others Total")
206 oth_lbl.grid(row = 2,column = 0,padx = 10,pady = 5)
207 oth_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.total_other)
208 oth_en.grid(row = 2,column = 1,ipady = 2,ipadx = 5)
209
210 #================
211 cosmt_lbl = Label(F4,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Food Tax")
212 cosmt_lbl.grid(row = 0,column = 2,padx = 30,pady = 0)
213 cosmt_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.tax_cos)
214 cosmt_en.grid(row = 0,column = 3,ipady = 2,ipadx = 5)
215
216 #=================
217 grot_lbl = Label(F4,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Grocery Tax")
218 grot_lbl.grid(row = 1,column = 2,padx = 30,pady = 5)
219 grot_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.tax_groc)
220 grot_en.grid(row = 1,column = 3,ipady = 2,ipadx = 5)
221
222 #==================
223 otht_lbl = Label(F4,font = ("times new roman",15,"bold"),fg = lbl_color,bg = bg_color,text = "Others Tax")
224 otht_lbl.grid(row = 2,column = 2,padx = 10,pady = 5)
225 otht_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.tax_other)
226 otht_en.grid(row = 2,column = 3,ipady = 2,ipadx = 5)
227
228 #====================
229 total_btn = Button(F4,text = "Total",bg = bg_color,fg = fg_color,font=("lucida",12,"bold"),bd = 7,relief = GROOVE,command = self.total)
230 total_btn.grid(row = 1,column = 4,ipadx = 20,padx = 30)
231
232 #========================
233 genbill_btn = Button(F4,text = "Generate Bill",bg = bg_color,fg = fg_color,font=("lucida",12,"bold"),bd = 7,relief = GROOVE,command = self.bill_area)
234 genbill_btn.grid(row = 1,column = 5,ipadx = 20)
235
236 #====================
237 clear_btn = Button(F4,text = "Clear",bg = bg_color,fg = fg_color,font=("lucida",12,"bold"),bd = 7,relief = GROOVE,command = self.clear)
238 clear_btn.grid(row = 1,column = 6,ipadx = 20,padx = 30)
239
240 #======================
241 exit_btn = Button(F4,text = "Exit",bg = bg_color,fg = fg_color,font=("lucida",12,"bold"),bd = 7,relief = GROOVE,command = self.exit)
242 exit_btn.grid(row = 1,column = 7,ipadx = 20)
243
244 #Function to get total prices
245 def total(self):
246 #=================Total Food Prices
247 self.total_food_prices = (
248 (self.bread.get() * 1)+
249 (self.candy.get() * 3)+
250 (self.hamburger.get() * 8)+
251 (self.hotdog.get() * 6)+
252 (self.sandwich.get() * 4)
253 )
254 self.total_food.set("$"+str(self.total_food_prices))
255 self.tax_cos.set("$"+str(round(self.total_food_prices*0.05)))
256 #====================Total Grocery Prices
257 self.total_grocery_prices = (
258 (self.wheat.get()*1)+
259 (self.food_oil.get() * 5)+
260 (self.salt.get() * 1)+
261 (self.rice.get() *3)+
262 (self.sugar.get() * 2)
263
264 )
265 self.total_grocery.set("$"+str(self.total_grocery_prices))
266 self.tax_groc.set("$"+str(round(self.total_grocery_prices*0.05)))
267 #======================Total Other Prices
268 self.total_other_prices = (
269 (self.gatorade.get() * 4)+
270 (self.juice.get() * 2)+
271 (self.coke.get() * 2)+
272 (self.waffer.get() * 2)+
273 (self.biscuits.get() * 2)
274 )
275 self.total_other.set("$"+str(self.total_other_prices))
276 self.tax_other.set("$"+str(round(self.total_other_prices*0.05)))
277
278
279 #Function For Text Area
280 def welcome_soft(self):
281 self.txt.delete('1.0',END)
282 self.txt.insert(END," Welcome To Store's Retail\n")
283 self.txt.insert(END,f"\nBill No. : {str(self.c_bill_no.get())}")
284 self.txt.insert(END,f"\nCustomer Name : {str(self.cus_name.get())}")
285 self.txt.insert(END,f"\nPhone No. : {str(self.c_phone.get())}")
286 self.txt.insert(END,"\n===================================")
287 self.txt.insert(END,"\nProduct Qty Price")
288 self.txt.insert(END,"\n===================================")
289
290 #Function to clear the bill area
291 def clear(self):
292 self.txt.delete('1.0',END)
293
294 #Add Product name , qty and price to bill area
295 def bill_area(self):
296 self.welcome_soft()
297 if self.bread.get() != 0:
298 self.txt.insert(END,f"\nBread {self.bread.get()} {self.bread.get() * 1}")
299 if self.candy.get() != 0:
300 self.txt.insert(END,f"\nCandy {self.candy.get()} {self.candy.get() * 3}")
301 if self.hamburger.get() != 0:
302 self.txt.insert(END,f"\nHamburger {self.hamburger.get()} {self.hamburger.get() * 8}")
303 if self.hotdog.get() != 0:
304 self.txt.insert(END,f"\nHotdog {self.hotdog.get()} {self.hotdog.get() * 6}")
305 if self.sandwich.get() != 0 :
306 self.txt.insert(END,f"\nSandwich {self.sandwich.get()} {self.sandwich.get() * 4}")
307 if self.wheat.get() != 0:
308 self.txt.insert(END,f"\nWheat {self.wheat.get()} {self.wheat.get() * 1}")
309 if self.food_oil.get() != 0:
310 self.txt.insert(END,f"\nFood Oil {self.food_oil.get()} {self.food_oil.get() * 5}")
311 if self.salt.get() != 0:
312 self.txt.insert(END,f"\nSalt {self.salt.get()} {self.salt.get() * 1}")
313 if self.rice.get() != 0:
314 self.txt.insert(END,f"\nRice {self.rice.get()} {self.rice.get() * 3}")
315 if self.sugar.get() != 0:
316 self.txt.insert(END,f"\nSugar {self.sugar.get()} {self.sugar.get() * 2}")
317 if self.gatorade.get() != 0:
318 self.txt.insert(END,f"\nGatorade {self.gatorade.get()} {self.gatorade.get() * 4}")
319 if self.juice.get() != 0:
320 self.txt.insert(END,f"\nJuice {self.juice.get()} {self.juice.get() * 2}")
321 if self.coke.get() != 0:
322 self.txt.insert(END,f"\nCoke {self.coke.get()} {self.coke.get() * 2}")
323 if self.waffer.get() != 0:
324 self.txt.insert(END,f"\nWaffer {self.waffer.get()} {self.waffer.get() * 2}")
325 if self.biscuits.get() != 0:
326 self.txt.insert(END,f"\nBiscuits {self.biscuits.get()} {self.biscuits.get() * 2}")
327 self.txt.insert(END,"\n===================================")
328 self.txt.insert(END,f"\n Total : ${self.total_food_prices+self.total_grocery_prices+self.total_other_prices+self.total_food_prices * 0.05+self.total_grocery_prices * 0.05+self.total_other_prices * 0.05}")
329
330
331 def exit(self):
332 self.root.destroy()
333
334
335
336
337
338
339 root = Tk()
340 object = Bill_App(root)
341 root.mainloop()